package com.ys.day27.p4线程池与并发;

import java.util.concurrent.*;

/**
 * 描述: P3Callable判断奇数偶数
 * 场景：使用Callable完成一个任务，判断3~100之间的奇偶性
 *  * 步骤：
 *  * 1 创建线程池对象
 *  * 2 使用循环遍历3~100之间的整数
 *  * 3 调用submit方法将实现Callable接口的任务注入到该方法中
 *  * 4 获取计算结果(偶数返回true，奇数返回false）
 *  * 5 打印结果
 * @author CodeYang
 * @version 2021/1/6 21:23
 */
public class P3Callable判断奇数偶数 {

    public static void main(String[] args) throws ExecutionException {
        // 1 创建线程池
        ExecutorService pool = Executors.newFixedThreadPool(5);

        for (int i = 3; i <= 100; i++) {
            // 外部类传入给匿名内部类的变量必须使用final修饰
            final int index = i;
            Future<Boolean> future = pool.submit(new Callable<Boolean>() {
                /**
                 * // (index & 1)  只会返回 0 | 1  0 为偶数,1 为奇数
                 * @return
                 * @throws Exception
                 */
                //匿名内部类方式去使用
                @Override
                public Boolean call() throws Exception {

                    // (index & 1)  只会返回 0 | 1  0 为偶数,1 为奇数
                    return (index & 1) == 0;
                }
            });
            // get()是Future对象的一个成员方法，用于获取Callable接口返回的结果
            try {
                Boolean aBoolean = future.get();
                System.out.println(index+"是"+aBoolean);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }
}
